'''
Created on 04/05/2013

@author: cristian
'''
from pm import app
from . import jsonifiedview
from flask import request
from sqlalchemy.exc import IntegrityError
from pm.database import db
from . import ensureParams
from pm.models.TipoItem import TipoItem
from pm.models.Fases import Fases
import simplejson
from pm.models.TiposItemFases import TiposItemFases


@app.route('/tipositemfases/listardistinct', methods=['GET', 'POST'])
@jsonifiedview
def listarRelacionTipoItemFaseDistinct():
    params = {'GET':request.args, 'POST':request.form}[request.method]
    resp = []
    resp = TipoItem.query.all()
    tipoItemFase = TiposItemFases.query.filter(TiposItemFases.id_fase == params['id'])
    for tif in tipoItemFase:
        tipoItem = TipoItem.query.filter(TipoItem.id_tipo_item == tif.id_tipo_item)
        for ti in tipoItem:
            #if ti not in resp:
            resp.remove(ti)
    
    return resp

@app.route('/tipositemfases/listar', methods=['GET', 'POST'])
@jsonifiedview
def listarRelacionTipoItemFase():
    params = {'GET':request.args, 'POST':request.form}[request.method]
    resp = []
    tipoItemFase = TiposItemFases.query.filter(TiposItemFases.id_fase == params['id']).filter(TiposItemFases.activo == True)
    for tif in tipoItemFase:
        tipoItem = TipoItem.query.filter(TipoItem.id_tipo_item == tif.id_tipo_item)
        for item in tipoItem:
            item.activo=tif.activo
            resp.append(item)
    return resp

@app.route('/tipositemfases/listarActivos', methods=['GET', 'POST'])
@jsonifiedview
def listarRelacionTipoItemFaseActivo():
    params = {'GET':request.args, 'POST':request.form}[request.method]
    resp = []
    tipoItemFase = TiposItemFases.query.filter(TiposItemFases.id_fase == params['id']).filter(TiposItemFases.activo==True)
    for tif in tipoItemFase:
        tipoItem = TipoItem.query.filter(TipoItem.id_tipo_item == tif.id_tipo_item)
        for item in tipoItem:
            item.activo=tif.activo
            resp.append(item)
    return resp

@app.route('/tipositemfases/crear', methods=['GET', 'POST']) 
@jsonifiedview
def crearRelacionTipoItemFase():
    '''
         Metodo que crea una relacion entre un tipo item y fase
         @param id_tipo_item: identificador del tipo de item
         @param id_fase: identificador de la fase a relacionar 
    '''
    params = {'GET':request.args, 'POST':request.form}[request.method]
    response = {}
    
    if not ensureParams(params, ['id_tipo_item', 'id_fase', 'activo']): 
        response = {"success" : False , "msg" : "Parametros Insuficientes!!"} 
        return response
    try:
        tiposItemFases = TiposItemFases(params['id_tipo_item'], params['id_fase'], params['activo'])
        db.session.add(tiposItemFases)
        db.session.commit()
        response = {"success" : True , "msg" : "Creacion exitosa!!"} 
        return response    
    except Exception, e:
        db.session.rollback()
        response = {"success" : False , "msg" : "Error en la base de datos!!"}
        return response 
    
@app.route('/tipositemfases/activardesrelacion', methods=['GET', 'POST']) 
@jsonifiedview
def activarDesRelacionTipoItemFase():
    '''
         Metodo que desactiva una relacion entre un tipo item y fase
         @param id:identificador de la relacion entre un tipo de item y una fase 
          
    '''
    params = {'GET':request.args, 'POST':request.form}[request.method]
    response = {}
    
    if not ensureParams(params, ['id_tipo_item', 'id_fase','activo']): 
        response = {"success" : False , "msg" : "Parametros Insuficientes!!"} 
        return response  
    try:
        tipoItemFase = TiposItemFases.query.filter(TiposItemFases.id_fase == params['id_fase']).filter(TiposItemFases.id_tipo_item==params['id_tipo_item']).update({'activo':params['activo']})
        db.session.commit()
        response = {"success" : True , "msg" : "Modificacion exitosa!!"} 
        return response    
    except Exception, e:
        db.session.rollback()
        response = {"success" : False , "msg" : "Error en la base de datos!!"}
        return response 
        
        
        
        
        
    
